/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Service;

import DB.Establecimiento;
import DB.HibernateUtil;
import DB.ProgramaDipreca;
import com.google.gson.Gson;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Rodrigo
 */
@WebService()
public class ProgramaDiprecaWS {

    /**
     * Web service operation agrega un nuevo Programa Dipreca
     */
    @WebMethod(operationName = "agregarProgramaDipreca")
    public boolean agregarProgramaDipreca(@WebParam(name = "programaDipreca") ProgramaDipreca programaDipreca) {
        //TODO write your implementation code here:
        return ControladorDeObjetos.saveObject(programaDipreca);
    }

    /**
     * Web service operation edita un programa Dipreca
     */
    @WebMethod(operationName = "editarProgramaDipreca")
    public boolean editarProgramaDipreca(@WebParam(name = "programaDipreca") ProgramaDipreca programaDipreca) {
        //TODO write your implementation code here:
        return ControladorDeObjetos.updateObject(programaDipreca);
    }

    /**
     * Web service operation obtiene un  programa dipreca a traves de su id
     */
    @WebMethod(operationName = "obtenerProgramaDipreca")
    public Object obtenerProgramaDipreca(@WebParam(name = "numero") String numero) {
        //TODO write your implementation code here:
        return ControladorDeObjetos.loadObjectByStringId(numero, ProgramaDipreca.class);
    }

    /**
     * Web service operation lista los programas dipreca
     */
    @WebMethod(operationName = "listarProgramasDipreca")
    public List<ProgramaDipreca> listarProgramasDipreca() {
        //TODO write your implementation code here:
        return ControladorDeObjetos.getAllObjectByClassType(ProgramaDipreca.class);
    }
    /*
     * elimina un programa dipreca
     */

    @WebMethod(operationName = "eliminarProgramaDipreca")
    public boolean eliminarProgramaDipreca(@WebParam(name = "Id") String Id) {

        ProgramaDipreca programa = (ProgramaDipreca) ControladorDeObjetos.loadObjectByStringId(Id, ProgramaDipreca.class);
        ControladorDeObjetos.deleteObject(programa);
        return true;
    }
    /*
     * agrega un programa dipreca  a la papelera
     */

    @WebMethod(operationName = "agregarProgramaDiprecaPapelera")
    public boolean agregarProgramaDiprecaPapelera(@WebParam(name = "programa") ProgramaDipreca programa) {
        ControladorDeObjetos.saveObject(programa);
        return true;
    }

    /**
     * Web service operation que filtra por rut de profesional,paciente, numero orden, especialdiad, diagnostico, fecha emision
     */
    @WebMethod(operationName = "buscarProgramaDipreca")
    public String buscarProgramaDipreca(@WebParam(name = "buscar") String buscar) {
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = s.beginTransaction();
        Criteria c = s.createCriteria(ProgramaDipreca.class).add(Restrictions.or(Restrictions.or(Restrictions.like("numeroPrograma", "%" + buscar + "%"), Restrictions.like("numeroComplementario", "%" + buscar + "%")),
                Restrictions.or(Restrictions.or(Restrictions.like("rutPaciente", "%" + buscar + "%"), Restrictions.like("rutProfesional", "%" + buscar + "%")), Restrictions.or(Restrictions.like("rutProfesionalExterno", "%" + buscar + "%"), Restrictions.like("diagnostico", "%" + buscar + "%")))));
        List l = c.list();
        Gson gson = new Gson();
        String json = gson.toJson(l);
        s.close();
        return json;
    }
    
    @WebMethod(operationName = "cambiarEstadoProgramaDipreca")
    public boolean cambiarEstadoProgramaDipreca(@WebParam(name = "idPrograma")String idPrograma, @WebParam(name = "pagado")boolean pagado) {
        ProgramaDipreca pd = (ProgramaDipreca) ControladorDeObjetos.loadObjectByStringId(idPrograma, ProgramaDipreca.class);
        pd.setPagado(pagado);
        return ControladorDeObjetos.updateObject(pd);
    }
        /**
     * Web service operation lista los programas dipreca
     */
    @WebMethod(operationName = "listarEstablecimientos")
    public List<Establecimiento> listarEstablecimientos() {
        //TODO write your implementation code here:
        return ControladorDeObjetos.getAllObjectByClassType(Establecimiento.class);
    }
}
